#include<iostream>
#include<unistd.h>
#include<semaphore.h>
#include<pthread.h>
sem_t sem;
void* func(void* args)
{
    std::string name=static_cast<const char*>(args);
    std::cout<<name<<"信号量申请中"<<std::endl;
    sem_wait(&sem);
    //模拟处理公共资源
    std::cout<<name<<"正在处理资源"<<std::endl;
    sleep(2);
    std::cout<<name<<"释放信号量"<<std::endl;
    sem_post(&sem);
    return nullptr;
}
int main()
{ 
    //第二个参数0表示线程间,1表示进程间  
    //第三个参数表示信号量初始值
    sem_init(&sem,0,1); //也是二元信号量
    pthread_t th1,th2;
    pthread_create(&th1,nullptr,func,(void*)"thread-1");
    pthread_create(&th2,nullptr,func,(void*)"thread-2");
    pthread_join(th1,nullptr);
    pthread_join(th2,nullptr);
    sem_destroy(&sem);
    return 0;
}
